package view;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;

import Transformers.BooleanToSiNoTransformer;
import ApplicationModels.PlanificacionAppModel;
import ApplicationModels.PlanificarHorariosAppModel;
import ApplicationModels.VerHorariosAppModel;
import Domain.Planificacion;

@SuppressWarnings("serial")
public class PlanificacionWindow extends SimpleWindow<PlanificacionAppModel> {

	public PlanificacionWindow(WindowOwner parent, PlanificacionAppModel model) {
		super(parent, model);
	}

	public void abrirVerHorarios() {
		this.openSimpleWindow(new VerHorariosWindow(this,
				new VerHorariosAppModel(this.getModelObject().getTienda(), this
						.getModelObject().getPlanificacionSeleccionada())));
	}

	public void abrirArmarPlanificacion() {
		this.openSimpleWindow(new PlanificarHorariosWindow(this,
				new PlanificarHorariosAppModel(this.getModelObject()
						.getPlanificacionSeleccionada(), this.getModelObject()
						.getTienda())));
	}

	public void openSimpleWindow(SimpleWindow<?> simpleWindow) {
		simpleWindow.open();
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		this.setTitle("Planificacion de la semana");

		this.crearTabla(mainPanel);

	}

	private void crearTabla(Panel mainPanel) {
		Table<Planificacion> table = new Table<Planificacion>(mainPanel,
				Planificacion.class);
		table.setHeigth(200);
		table.setWidth(450);

		table.bindItemsToProperty("listaPlanificaciones");
		table.bindValueToProperty("planificacionSeleccionada");

		this.describeResultsGrid(table);
	}

	private void describeResultsGrid(Table<Planificacion> table) {

		Column<Planificacion> fecha = new Column<Planificacion>(table);
		fecha.setTitle("Fecha");
		fecha.setFixedSize(200);
		fecha.bindContentsToProperty("fechaAPlanificar");

		Column<Planificacion> estado = new Column<Planificacion>(table);
		estado.setTitle("Estado");
		estado.setFixedSize(150);
		estado.bindContentsToTransformer(new BooleanToSiNoTransformer());
		// bindContentsToProperty("estadoPlanificacion").;

		// .bindContentsToTransformer(new BooleanToStringTransformer());

	}

	protected void addActions(Panel actionsPanel) {
		Button planificar = new Button(actionsPanel).setCaption("Planificar")
				.onClick(new MessageSend(this, "abrirArmarPlanificacion"));

		new Button(actionsPanel).setCaption("Ver Horarios").onClick(
				new MessageSend(this, "abrirVerHorarios"));

		Button cerrar = new Button(actionsPanel);
		cerrar.setCaption("Cerrar");
		cerrar.onClick(new MessageSend(this, "close"));

		NotNullObservable elementSelected = new NotNullObservable(
				"planificacionSeleccionada");
		planificar.bindEnabled(elementSelected);
	}

}
